package net.sf.rose.jdbc;

import java.util.ArrayList;
import java.util.List;


/**
 * 功能：自动拼接SQL语句
 * @author fengjian
 * @since 2013/05/18
 */
public abstract class QuerySQL {

	/** 实体类型 */
	protected Class<?> entityClass;

	/** 执行数据库操作用的SQL语句 */
	protected String sql = null;

	/** 执行数据库操作用的参数 */
	protected List<Object> list = new java.util.ArrayList<Object>();

	/** 分页参数 */
	protected PageBean page = null;

	/**
	 * 返回实体类型
	 */
	protected Class<?> getEntityClass() {
		return entityClass;
	}

	/**
	 * 设置实体类型
	 */
	public void setEntityClass(Class<?> entityClass) {
		this.entityClass = entityClass;
	}

	/**
	 * 功能:设置数据库操作用的参数
	 * @param sql  - SQL语句
	 */
	public void setSQL(String sql) {
		this.sql = sql;
		if (this.list != null) {
			this.list.clear();
		}
	}

	/**
	 * 功能:返回执行数据库操作用的SQL语句
	 */
	protected String getSql() {
		return this.sql;
	}

	/**
	 * 功能:设置数据库操作用的参数
	 * @param list - 参数列表
	 */
	public void setParameters(List<Object> list) {
		this.list = list;
	}

	/**
	 * 功能:设置数据库操作用的参数
	 * @param list - 参数列表
	 */
	public void addParameter(Object parameter) {
		if (this.list == null) {
			this.list = new ArrayList<Object>();
		}
		this.list.add(parameter);
	}

	/**
	 * 功能:返回执行数据库批量操作用的参数
	 */
	protected List<Object> getParameterList() {
		return this.list;
	}

	/**
	 * 功能:返回执行数据库批量操作用的分页参数
	 */
	protected PageBean getPage() {
		return page;
	}

	/**
	 * 功能:设置数据库操作用的分页参数
	 * @param page - 分页列表
	 */
	public void setPage(PageBean page) {
		this.page = page;
	}

	/**
	 * 取得分页查询总记录数SQL语句
	 */
	protected String getCountSql() {
		// 如果当前数据库是Mysql
		if (DBUtils.isMysqlDatabaseUsed()) {
			int index = sql.indexOf("from");
			if (index == -1) {
				index = sql.indexOf("FROM");
			}
			String countSql = "SELECT COUNT(*) " + sql.substring(index);
			int begin = page.getCurrentPage() -1;
			// begin = begin < 0 ? 0 : begin;
			sql = sql + " LIMIT " + begin * page.getPageSize() + ',' + page.getPageSize();
			return countSql;
		}
		return null;
	}

	/**
	 * 返回数据库操作的执行者
	 */
	public abstract UserBean getUser();

}
